#include<bits/stdc++.h>
using namespace std;
int n,Q;
inline int read() {
	int x=0,c=getchar();
	for(; 48>c || c>57; c=getchar());
	for(; 48<=c && c<=57; c=getchar())
		x=(x<<1)+(x<<3)+(c&15);
	return x;
}
struct fff {
	int num,id;
} a[8003],get[8003];
bool cmp(fff e,fff o) {
	return e.num<=o.num;
}
int b[8003];
void kbsort(int l,int r){
	if(l==r)return;
	int mid=(l+r)>>1;
	kbsort(l,mid);
	kbsort(mid+1,r);
	int pos1=l,pos2=mid+1;
	for(int i=l;i<=r;++i){
		if(pos2>r){
			a[i]=get[pos1++];
		}
		else if(pos1>mid){
			a[i]=get[pos2++];
		}
		else if(cmp(get[pos1],get[pos2])){
			a[i]=get[pos1++];
		}
		else{
			a[i]=get[pos2++];
		}
	}
}
void trn(int way) {
	int d=a[way].num,p=a[way].id;
	if(a[way-1].num>d || (a[way-1].num==d && a[way-1].id>p)) {
		--way;
		while(way>0 && (a[way].num>d || (a[way].num==d && a[way].id>p))) {
			a[way+1].id=a[way].id,a[way+1].num=a[way].num;
			b[a[way+1].id]=way+1;
			--way;
		}
		a[way+1].id=p,a[way+1].num=d;
		b[p]=way+1;
	} else if(a[way+1].num<d || (a[way+1].num==d && a[way+1].id<p)) {
		++way;
		while(way<=n && (a[way].num<d || (a[way].num==d && a[way].id<p))) {
			a[way-1].id=a[way].id,a[way-1].num=a[way].num;
			b[a[way-1].id]=way-1;
			++way;
		}
		a[way-1].id=p,a[way-1].num=d;
		b[p]=way-1;
	}
//	for(int i=1; i<=n; ++i) {
//		printf("%d ",a[i].num);
//	}
//	putchar(10);
//	for(int i=1; i<=n; ++i) {
//		printf("%d ",b[i]);
//	}
//	putchar(10);
}
int main() {
	freopen("sort.in","r",stdin);
	freopen("sort.out","w",stdout);
	int opt,x,v;
	n=read();
	Q=read();
//	printf("%d\n",n);
	for(int i=1; i<=n; ++i) {
		get[i].num=read();
		get[i].id=i;
	}
	kbsort(1,n);
//	sort(a+1,a+n+1,cmp);
	fff t;
	for (int i = 1; i <= n; i++)
		for (int j = i; j>=2; j--)
			if (!cmp(a[j-1],a[j])) {
				t = a[j-1];
				a[j-1] = a[j];
				a[j] = t;
			}
//	for (int i = 1; i <= n; i++){
//		printf("%d %d ",a[i].num,a[i].id);
//	}
	for(int i=1; i<=n; ++i) {
		b[a[i].id]=i;
	}
//	for(int i=1; i<=n; ++i) {
//		printf("%d ",b[i]);
//	}
//	putchar(10);
	while(Q--) {
//		printf("%d\n",Q);
		opt=read();
		if(opt==1) {
			x=read();
			v=read();
			a[b[x]].num=v;
			trn(b[x]);
		} else {
			x=read();
			printf("%d\n",b[x]);
		}
	}
	return 0;
}

